# encoding: utf-8
class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception
  
  include AuthenticatedSystem 
  include AuthorizationSystem
  include ManejadorEmpleado
  include Reportes::GenerarReporte
  

  before_filter :login_required#,:tiene_perfil?,:perfil_autorizado
  
  
  private
 
  
  def nombre_simple_controlador(controlador) #llega de la forma -> NombreController
    nombre_controlador=controlador.gsub("Controller","")
    nombre_controlador.downcase   #se envia de la forma -> nombre
  end
  
  def nombre_completo_controlador(controlador)
    controlador.capitalize + "Controller"
  end
  
  def obtener_controladores
     routes=Rails.application.routes.routes.map do |route|
        route.defaults[:controller]
     end
     
    routes[1..-2].uniq
  end
  
  def obtener_clase_controlador(controlador)
    palabra=""
    controlador.split("_").each do |p|
      palabra+= p.capitalize
    end

    str= palabra + "Controller"
    str = eval str
  end
  
  
      # Genera un reporte generico de un catalogo.
    # Recibe
    #    metodo: puede ser index (para muchos registros) o show(para uno solo)
    #    objeto: es un HASH 
    #    OPTIONS:
    #      nombre_archivo = Nombre del archivo PDF
    #      columnas_size  = Tamaño de las columnas de la tabla
    #      titulo         = Titulo principal dentro del PDF
    #      encabezados    = Encabezados de la tabla principal. Si esta vacio se pondran los campos de la tabla
    #      titulo_det     = Titulo de la tabla detalle
    #      encabezados_det= Encabezados de la tabla detalle. Si esta vacio se pondran los campos de la tabla detalle
    #      detalles       = Array de objetos(HASH). Ver ejemplo en el modelo Deportista sobre como crear el Array con relaciones

   def generar_reporte(metodo,objeto,options = {})

      nombre_archivo = options[:nombre_archivo].nil? ? "Reporte.pdf" : options[:nombre_archivo]
      send_data Reportes::GenerarReporte.basico(metodo,objeto,options),
        :filename      => nombre_archivo,
        :type              => 'application/pdf',
        :disposition  => 'inline'
    end
    
end
